From 5c0d85e6799f7b3184d0c75ab07c80ecdc7bfb3d Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Thu, 13 Apr 2006 10:12:16 +0100 Subject: [PATCH] Unmap shadow vtable when freeing shadow table in free_shadow_pages(). Signed-off-by: Xin Li --- xen/arch/x86/shadow32.c | 7 +++++++ xen/arch/x86/shadow_public.c | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/xen/arch/x86/shadow32.c b/xen/arch/x86/shadow32.c index 0af335f623..458bb99555 100644 --- a/xen/arch/x86/shadow32.c +++ b/xen/arch/x86/shadow32.c @@ -583,6 +583,13 @@ static void free_shadow_pages(struct domain *d) { put_shadow_ref(pagetable_get_pfn(v->arch.shadow_table)); v->arch.shadow_table = mk_pagetable(0); + + if ( shadow_mode_external(d) ) + { + if ( v->arch.shadow_vtable ) + unmap_domain_page_global(v->arch.shadow_vtable); + v->arch.shadow_vtable = NULL; + } } if ( v->arch.monitor_shadow_ref ) diff --git a/xen/arch/x86/shadow_public.c b/xen/arch/x86/shadow_public.c index 58edcb552a..eee8fadb3e 100644 --- a/xen/arch/x86/shadow_public.c +++ b/xen/arch/x86/shadow_public.c @@ -898,6 +898,13 @@ void free_shadow_pages(struct domain *d) { put_shadow_ref(pagetable_get_pfn(v->arch.shadow_table)); v->arch.shadow_table = mk_pagetable(0); + + if ( shadow_mode_external(d) ) + { + if ( v->arch.shadow_vtable ) + unmap_domain_page_global(v->arch.shadow_vtable); + v->arch.shadow_vtable = NULL; + } } if ( v->arch.monitor_shadow_ref ) -- 2.30.2